/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package minimundo.objetos;

/**
 * Esta classe representa uma lanternacom todas as suas funções
 * @author charles
 */
public class Lanterna {
	private String cor;
	private String material;
	private double comprimento;
    private double diametro;
	private int qtdLampadas;
	private int qtdPilhas;
	private double alcanceIluminação;
    private double horasAutonomia, minutosAutonomia;
    private boolean ligada;

    /**
     * Construtor sem parâmetros que "cria" a lanterna
     *
     */
    public Lanterna(Pilha pilha) {
        ligada = true;
        setAutonomia(pilha);
    }

    /**
     * Acessor get que retorna a cor da lanterna.
     * @return cor, a cor da lanterna.
     */
    public String getCor() {
        return cor;
    }

    /** Acessor set que define a cor da lanterna.
     * @param cor, a cor da lanterna.
     */
    public void setCor(String cor) {
        this.cor = cor;
    }

    /** Acessor get que retorna o(s) material(ais) que compõem a lanterna.
     * @return material, o material da lanterna.
     */
    public String getMaterial() {
        return material;
    }

    /** Acessor set que define o(s) material(ais) que compõem a lanterna.
     * @param material, o material da lanterna.
     */
    public void setMaterial(String material) {
        this.material = material;
    }

    /** Acessor get que retorna o comprimento da lanterna.
     * @return comprimento, o comprimento da lanterna
     */
    public double getComprimento() {
        return comprimento;
    }

    /** Acessor set que define o comprimento da lanterna
     * @param comprimento, o comprimento da lanterna
     */
    public void setComprimento(double comprimento) {
        this.comprimento = comprimento;
    }

    /** Acessor get que retorna o diâmetro da lanterna
     * @return diametro, o diâmetro da lanterna
     */
    public double getDiametro() {
        return diametro;
    }

    /** Acessor set que define o diâmetro da lanterna
     * @param diametro, o diâmetro da lanterna
     */
    public void setDiametro(double diametro) {
        this.diametro = diametro;
    }

    /** Acessor get que retorna a quantidade de lâmpadas da lanterna
     * @return qtdLampadas, a quantidade de lâmpadas da lanterna
     */
    public int getQtdLampadas() {
        return qtdLampadas;
    }

    /** Acessor set que define a quantidade de lâmpadas da lanterna
     * @param qtdLampadas, a quantidade de lâmpadas da lanterna
     */
    public void setQtdLampadas(int qtdLampadas) {
        this.qtdLampadas = qtdLampadas;
    }

    /** Acessor get que retorna a quantidade de lâmpadas da lanterna
     * @return the qtdPilhas
     */
    public int getQtdPilhas() {
        return qtdPilhas;
    }

    /** Acessor set que define a quantidade de pilhas da lanterna
     * @param qtdPilhas, quantidade de pilhas da lanterna
     */
    public void setQtdPilhas(int qtdPilhas) {
        this.qtdPilhas = qtdPilhas;
    }

    /** Acessor get que retorna o alcance da iluminação da lanterna
     * @return alcanceIluminação, alcance da iluminação da lanterna
     */
    public double getAlcanceIluminação() {
        return alcanceIluminação;
    }

    /** Acessor set que define o alcance da iluminação da lanterna
     * @param alcanceIluminação, alcance da iluminação de lanterna
     */
    public void setAlcanceIluminação(double alcanceIluminação) {
        this.alcanceIluminação = alcanceIluminação;
    }

    /** Acessor get que retorna a quantidade de horas que a lanterna funciona, partindo do princípio que a carga está cheia
     * @return autonomia, a autonomia da lanterna
     */
    public String getAutonomia() {
        String autonomia = String.valueOf(horasAutonomia)+ ":" + String.valueOf(minutosAutonomia);
        return autonomia;
    }

    /** Acessor set que define a quantidade de horas que a lanterna funciona, de acordo com o tipo de pilha
     * @param tipoPilha do tipo Pilha
     */
    public void setAutonomia(Pilha tipoPilha) {
        if(tipoPilha.getTipo().equalsIgnoreCase("A")) { // consirderemos que o usuário é inteligente e não vai digitar mais que 119 minutos
            this.horasAutonomia = 1;
            this.minutosAutonomia = 30;
        }
        else {
            if(tipoPilha.getTipo().equalsIgnoreCase("AA")) {
                this.horasAutonomia = 3;
                this.minutosAutonomia = 0;
            }
            else {
                if(tipoPilha.getTipo().equalsIgnoreCase("AAA")) {
                    this.horasAutonomia = 4;
                    this.minutosAutonomia = 30;
                }
            }
        }
    }

    /**
     * Método que liga/desliga a lanterna
     */
    public void ligarDesligar() {
        if(ligada) {
            ligada = false;
        }
        else {
            ligada = true;
        }
    }

    /**
     * Acessor set que define quanto é a autonomia em horas e minutos da lanterna
     * @param hora, que define quantas horas a lanterna foi usada
     * @param minutos, que define quantos minutos a lanterna foi usada
     */
    public void setUso(int hora, int minutos) {
        if(ligada) {
            if(horasAutonomia ==0 && minutosAutonomia == 0) { // se a pilha está vazia
                System.out.println("troque suas pilhas");
            }
            else {
                //faltam algumas verificações
                if(minutos >= 60) { // consideremos que o usuário nunca vai informar a quantidade de minutos com um número maior 119
                    this.horasAutonomia--;
                    this.horasAutonomia -= hora;
                    minutos -= 60;
                    this.minutosAutonomia -= minutos;
                }
                else { // se o parâmetro (minutos) passado estiver dentro do limite (59)
                    this.horasAutonomia -= hora;
                    this.minutosAutonomia -= minutos;
                }
            }
        }
    }
}
